// 多人版本的扑克牌类
export class Card {
  constructor(suit, rank, type, displayName) {
    this.suit = suit; // 花色: hearts, diamonds, spades, clubs
    this.rank = rank; // 点数: 7, 8, 9, 10, J, Q, K, joker
    this.type = type; // 类型: 卒, 马, 相, 尔, 曲曲, 王
    this.displayName = displayName; // 显示名称
    this.power = this.calculatePower(); // 牌力值
    this.id = `${suit}_${rank}_${Date.now()}_${Math.random()}`; // 唯一ID
  }

  calculatePower() {
    const powerMap = {
      '红尔': 24,
      '黑尔': 23,
      '红相': 22,
      '黑相': 21,
      '红马': 20,
      '黑马': 19,
      '红卒': 18,
      '黑卒': 17,
      '大王': 16,    // 大王最大
      '红曲曲': 15,  // 红曲曲第二
      '小王': 14,    // 小王第三
      '黑曲曲': 13   // 黑曲曲最小
    };
    return powerMap[this.displayName] || 0;
  }

  // 判断是否可以组成对子
  canPairWith(otherCard) {
    if (!otherCard) return false;
    
    // 曲曲牌特殊规则：同色的J、Q、K可以任意组合
    const ququRanks = ['J', 'Q', 'K'];
    if (ququRanks.includes(this.rank) && ququRanks.includes(otherCard.rank)) {
      // 检查是否同色
      const redSuits = ['hearts', 'diamonds'];
      const isThisRed = redSuits.includes(this.suit);
      const isOtherRed = redSuits.includes(otherCard.suit);
      return isThisRed === isOtherRed;
    }
    
    // 相同数字、相同颜色
    if (this.rank === otherCard.rank && this.rank !== 'joker') {
      const redSuits = ['hearts', 'diamonds'];
      const isThisRed = redSuits.includes(this.suit);
      const isOtherRed = redSuits.includes(otherCard.suit);
      return isThisRed === isOtherRed;
    }
    
    // 大小王特殊对子
    if (this.rank === 'joker' && otherCard.rank === 'joker') {
      return this.displayName !== otherCard.displayName;
    }
    
    return false;
  }

  // 获取牌的显示符号
  getSymbol() {
    const suitSymbols = {
      'hearts': '♥',
      'diamonds': '♦',
      'spades': '♠',
      'clubs': '♣'
    };
    
    if (this.rank === 'joker') {
      return this.displayName === '大王' ? '👑' : '🃏';
    }
    
    return suitSymbols[this.suit] || '';
  }

  // 获取牌的颜色
  getColor() {
    if (['hearts', 'diamonds'].includes(this.suit)) {
      return '#ff4444';
    }
    if (['spades', 'clubs'].includes(this.suit)) {
      return '#333';
    }
    // 王牌颜色
    if (this.displayName === '大王') {
      return '#ff4444'; // 大王红色
    }
    if (this.displayName === '小王') {
      return '#333';    // 小王黑色
    }
    return '#666';
  }

  // 序列化为JSON（用于网络传输）
  toJSON() {
    return {
      suit: this.suit,
      rank: this.rank,
      type: this.type,
      displayName: this.displayName,
      power: this.power,
      id: this.id
    };
  }

  // 从JSON反序列化
  static fromJSON(json) {
    const card = new Card(json.suit, json.rank, json.type, json.displayName);
    card.id = json.id; // 保持原有ID
    return card;
  }
}

// 创建一副牌
export function createDeck() {
  const deck = [];
  
  // 红卒（红桃7、方块7）
  deck.push(new Card('hearts', '7', '卒', '红卒'));
  deck.push(new Card('diamonds', '7', '卒', '红卒'));
  
  // 黑卒（黑桃7、梅花7）
  deck.push(new Card('spades', '7', '卒', '黑卒'));
  deck.push(new Card('clubs', '7', '卒', '黑卒'));
  
  // 红马（红桃8、方块8）
  deck.push(new Card('hearts', '8', '马', '红马'));
  deck.push(new Card('diamonds', '8', '马', '红马'));
  
  // 黑马（黑桃8、梅花8）
  deck.push(new Card('spades', '8', '马', '黑马'));
  deck.push(new Card('clubs', '8', '马', '黑马'));
  
  // 红相（红桃9、方块9）
  deck.push(new Card('hearts', '9', '相', '红相'));
  deck.push(new Card('diamonds', '9', '相', '红相'));
  
  // 黑相（黑桃9、梅花9）
  deck.push(new Card('spades', '9', '相', '黑相'));
  deck.push(new Card('clubs', '9', '相', '黑相'));
  
  // 红尔（红桃10、方块10）
  deck.push(new Card('hearts', '10', '尔', '红尔'));
  deck.push(new Card('diamonds', '10', '尔', '红尔'));
  
  // 黑尔（黑桃10、梅花10）
  deck.push(new Card('spades', '10', '尔', '黑尔'));
  deck.push(new Card('clubs', '10', '尔', '黑尔'));
  
  // 红曲曲（红桃J、Q、K）
  deck.push(new Card('hearts', 'J', '曲曲', '红曲曲'));
  deck.push(new Card('hearts', 'Q', '曲曲', '红曲曲'));
  deck.push(new Card('hearts', 'K', '曲曲', '红曲曲'));
  
  // 黑曲曲（黑桃J、Q、K）
  deck.push(new Card('spades', 'J', '曲曲', '黑曲曲'));
  deck.push(new Card('spades', 'Q', '曲曲', '黑曲曲'));
  deck.push(new Card('spades', 'K', '曲曲', '黑曲曲'));
  
  // 大小王
  deck.push(new Card('joker', 'joker', '王', '大王'));
  deck.push(new Card('joker', 'joker', '王', '小王'));
  
  return deck;
}